#ifndef IO_H_
#define IO_H_

#include <vector>
#include <cassert>
#include <cmath>
#include <iostream>

#include "Defines.h"
#include "vdouble.h"

using namespace std;

// Classe que representa uma entrada/saída
class Data
{

public:

    // Constrói uma nova entrada/saída passado a quantidade de cada variável e um vetor de tokens
    Data(uint nInVars, uint nOutVars, vdouble& io, int filetype);
    virtual ~Data();

    // Retorna o vetor de entradas
    vdouble& getInputVector();
    // Retorna o vetor de saídas
    vdouble& getOutputVector();
    // Retorna o vetor de saídas da rede neural
    vdouble& getNeuralOutputVector();

    // Seta o valor de saída i da rede neural
    void setNeuralOutput(uint i, double out);

    // Verifica se o cálculo da rede neural foi bem sucedido para esta entrada/saída
    bool hasSucceeded();

    // Imprime as entradas
    void printInput();
    // Imprime as saídas
    void printOutput();
    // Imprime as saídas da rede neural
    void printNeuralOutput();

private:

    vdouble input;
    vdouble output;
    vdouble neuralOutput;

};

#endif /* IO_H_ */
